﻿using Stimulus360.Models.Cms;

namespace Stimulus360.Services.Interfaces
{
    public interface ICmsService
    {
        /// <summary>
        ///     Method to add a photo to the project details
        /// </summary>
        /// <param name="photo">
        ///     The photo to be added
        /// </param>
        void AddPhoto(ProjectPhoto photo);

        /// <summary>
        ///     Method to retrieve photos for a given project
        /// </summary>
        /// <param name="projectId">
        ///     Project for which photos are to be retrieved
        /// </param>
        /// <param name="page">
        ///     Page number to be displayed
        /// </param>
        /// <param name="pageSize">
        ///     The number of photos to be displayed
        /// </param>
        /// <returns>
        ///     Photos for the given project
        /// </returns>
        PaginatedCollection<ProjectPhoto> GetPhotos(int projectId, int? page, int pageSize);

        /// <summary>
        ///     Method to retrieve a photo by its ID
        /// </summary>
        /// <param name="photoId">
        ///     The Photo ID to be retrieved
        /// </param>
        /// <returns>
        ///     The Photo for the given ID
        /// </returns>
        ProjectPhoto FindPhotoById(int photoId);

        /// <summary>
        ///     Method to add a document to the given project
        /// </summary>
        /// <param name="document">
        ///     The document to be added
        /// </param>
        void AddDocument(ProjectDocument document);

        /// <summary>
        ///     Method to retrieve documents for a given project
        /// </summary>
        /// <param name="projectId">
        ///     Project for which documents are to be retrieved
        /// </param>
        /// <param name="page">
        ///     Page number to be displayed
        /// </param>
        /// <param name="pageSize">
        ///     The number of documents to be displayed
        /// </param>
        /// <returns>
        ///     Documents for the given project
        /// </returns>
        PaginatedCollection<ProjectDocument> GetDocuments(int projectId, int? page, int pageSize);

        /// <summary>
        ///     Method to retrieve a document based on its ID
        /// </summary>
        /// <param name="docId">
        ///     ID for which document is to be retrieved
        /// </param>
        /// <returns>
        ///     Document  based on the given ID.
        /// </returns>
        ProjectDocument FindDocumentById(int docId);
    }
}
